2.1 네트워크 애플리케이션의 원리
네트워크 애플리케이션 개발의 중심은 다른 위치의 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램을 작성하는 것이다.
예를 들어, 웹 애플리케이션에는 서로 통신하는 서버(웹 서버 프로그램)와 클라이언트(사용자 호스트에서 실행되는 브라우저 프로그램)로 구별되는 두 가지 프로그램이 있다.
중요한 것은 우리가 라우터나 링크 계층 스위치처럼 네트워크 코어 장비에서 실행되는 소프트웨어까지 작성할 필요는 없다는 점이다. (그렇게 하고 싶더라도 네트워크 코어 장비는 애플리케이션 계층에서 기능하지 않기 때문에 그렇게 할 수 없다.)
2.1.1 네트워크 애플리케이션 구 조

클라이언트-서버 구조
- 항상 동작하고 있는 서버가 존재하고, 클라이언트라는 다른 호스트들로부터 서비스 요청을 받는다.
- 클라이언트는 서로 직접적으로 통신하지 않는다.
- 서버는 잘 알려진 고정 IP 주소를 갖는다.
P2P 구조
- 항상 켜져있는 인프라스트럭처 서버에 최소로 의존한다.(혹은 의존하지 않는다.)
- 대신에 애플리케이션은 peer라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신하게 한다.
- peer는 흔히 알려진 클라이언트(개인 데스크톱과 랩톱 등)이다.
- 자가 확장성을 가진다. 예를 들어, 파일 공유 애플리케이션에서는 각 피어들이 파일을 요구하여 작업 부하가 생기지만 각 피어들은 파일을 다른 피어들에게 분배하여 시스템에 서비스 능력을 갖춘다.
- 데이터 센터 등이 필요 없으므로 비용 효율적이다.
2.1.2 IPC
실제 통신하고 있는 것은 프로그램이 아니라, 실행되고 있는 프로세스이다.
2개의 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메 시지 교환으로 서로 통신한다. 송신 프로세스는 메시지를 만들어서 보내고 수신 프로세스는 메시지를 받고 역으로 메시지를 보냄으로써 응답한다.
클라이언트와 서버 프로세스
네트워크 애플리케이션은 네트워크에서 서로 메시지를 보내는 두 프로세스로 구성된다.
두 프로세스 간의 통신 세션에서 통신을 초기화(다른 프로세스와 세션을 시작하려고 접속을 초기화)하는 프로세스를 클라이언트(client)라고 하고, 세션을 시작하기 위해 접속을 기다리는 프로세스를 서버(server)라고 한다.
정보
요청을 보내는 쪽의 프로세스를 보통 클라이언트라고 하고 요청을 받는 쪽을 서버라고 한다. 당연히 P2P에서처럼 클라이언트도 서버 프로세스가 될 수 있고, 서버도 클라이언트 프로세스가 될 수 있다.